const fs = require('fs')
// callback hell
// fs.readFile('./a.json', (err, data) => {
//   console.log('a:', err, data.toString())
//   fs.readFile('./b.json', (err, data) => {
//     console.log('data:', data.toString())
//     fs.readFile('./c.json', (err, data) => {
//       console.log('data:', data.toString())
//       fs.readFile('./d.json', (err, data) => {
//         console.log('data:', data.toString())
//       })
//     })
//   })
// })

// function readFile(file, callback) {
//   fs.readFile(file, (err, data) => {
//     callback && callback(data.toString())
//   })
// }

// readFile('./a.json', (res) => {
//   console.log('res:', res)
//   readFile('./b.json', (res) => {
//     console.log('res:', res)
//     readFile('./c.json', (res) => {
//       console.log('res:', res)
//       readFile('./d.json', (res) => {
//         console.log('res:', res)
//       })
//     })
//   })
// })

function readFilePromise(file) {
  return new Promise((resolve, reject) => {
    fs.readFile(file, (err, data) => {
      if (err) {
        console.log('err:-----------', err)
        reject(err)
      } else {
        resolve(data.toString())
      }
    })
  })
}

/**
 * 1. async 返回什么？promise函数
 * 可读性｜可维护性｜
 */
const asyncReadFile = async () => {
  const a = await readFilePromise('./a.json')
  const b = await readFilePromise('./b.json')
  const c = await readFilePromise('./c.json')
  const d = await readFilePromise('./d.json')
  return { a, b, c, d }
}

asyncReadFile().then((res) => {
  console.log('asyncReadFile:', res)
})

/**
 * 与回调对比区别是什么？
 * 1. 好看
 * 2. 好读
 * 3. 将回调丢失的return又找了回来
 */
readFilePromise('./a.json')
  .then((res) => {
    console.log('res:', res)
    return readFilePromise('./h.json')
  })
  .then((res) => {
    console.log('res:', res)
    return readFilePromise('./c.json')
  })
  .then((res) => {
    console.log('res:', res)
    return readFilePromise('./d.json')
  })
  .then((res) => {
    console.log('res:', res)
  })
  .finally(() => {
    console.log('response:')
  })
  .catch((err) => {
    console.log('err:----最下面', err)
  })
